public class Day9 {
    // 43、字符串相乘
    public String multiply(String num1, String num2) {
        // 无进位相乘然后相加，在对其进行进位处理
        int n = num1.length();
        int m = num2.length();
        // 将字符串转换成字符数组，并且把字符串的字符顺序进行翻转，这样就可以进行计算
        char[] n1 = new StringBuffer(num1).reverse().toString().toCharArray();
        // 转换成 StringBuffer是为了进行reverse翻转，再转换成String类，之后进行拆分成字符数组
        char[] n2 = new StringBuffer(num2).reverse().toString().toCharArray();

        int[] tmp = new int[n + m - 1]; // 数组的长度就是 两个字符串的长度减1
        // 进行无进位 相乘 并进行 相加
        for(int i = 0;i < n;i++) {
            for(int j = 0;j < m;j++) {
                // tmp的下标就是 对应的i+j的位置
                tmp[i + j] += (n1[i] - '0') * (n2[j] - '0');
            }
        }

        StringBuffer ret = new StringBuffer();
        // 处理进位
        int cur = 0,t = 0;
        while(cur < m + n - 1 || t != 0) {
            if(cur < m + n - 1) {
                t += tmp[cur++];
            }
            ret.append((char)(t % 10 + '0'));
            t /= 10;
        }

        // 处理边界0的情况
        // 比如：ret为 880 (ret是结果的翻转 -> 088) 那么这个0就不能存在，需要进行删除
        // 也有可能是 有一个字符串是0的话，那么结果为 000 ，那么不能全部删除，需要留下一个
        while(ret.length() > 1 && ret.charAt(ret.length() - 1) == '0') {
            ret.deleteCharAt((ret.length() - 1));
        }

        return ret.reverse().toString();
    }
}
